var config = require("./config.js"); //统一的网络请求方法
var util = require("./util.js")
import {
	AppType
} from './constant.js'

var globalDomain = config.domain + "/api"
function request(params, isGetTonken) {
  // 全局变量
  var globalData = getApp().globalData; // 如果正在进行登陆，就将非登陆请求放在队列中等待登陆完毕后进行调用

  // if (!isGetTonken && globalData.isLanding) {
  //   globalData.requestQueue.push(params);
  //   return;
  // }

	if (Object.prototype.toString.call(params.data) == '[object Array]') {
		params.data = JSON.stringify(params.data);
	} else if (Object.prototype.toString.call(params.data) == '[object Number]') {
		params.data = params.data + '';
	}
	var needToken = false
	// if (params.url.indexOf("/") == 0 || params.url.indexOf("/user/registerOrBindUser") == 0) {
	// 	needToken = true
	// }
  wx.request({
    // url: config.domain + params.url,
    //接口请求地址
	url: (params.domain ? params.domain : globalDomain) + params.url,
    data: params.data,
    header: {
      // 'content-type': params.method == "GET" ? 'application/x-www-form-urlencoded' : 'application/json;charset=utf-8',
      // 'Authorization': params.login ? undefined : uni.getStorageSync('token')
		'Authorization': uni.getStorageSync('token') ,
    },
    method: params.method == undefined ? "POST" : params.method,
    dataType: 'json',
    responseType: params.responseType == undefined ? 'text' : params.responseType,
    success: function (res) {
		const responseData = res.data
		// 请求成功
		if (responseData.code === 1000) {
        if (params.callBack) {
          params.callBack(responseData.data);
        }
        return
      }

      // A00004 未授权
      if (responseData.code === 4001) {
			uni.removeStorageSync('loginResult');
			uni.removeStorageSync('token');
			// #ifdef H5
			const ua = navigator.userAgent.toLowerCase();
			if (ua.search(/MicroMessenger/i) > -1) uni.setStorageSync('appType', AppType.MP)
			// #endif
			uni.hideLoading();
			if (!params.dontTrunLogin) {
				if (uni.getStorageSync('hadLogin')) {
					uni.showModal({ title: "提示", content: "您还未登录，请先登录", cancelText: "取消", confirmText: "确定",
						success: res => {
							if (res.confirm) {
								// 跳转登录页面
								var url = ''
								// #ifdef H5 || MP-WEIXIN
								if (uni.getStorageSync('appType') == AppType.MP || uni.getStorageSync('appType') == AppType.MINI) {
									// url = '/pages/login/login'
									url = '/pages/accountLogin/accountLogin'
								} else {
									url = '/pages/accountLogin/accountLogin'
								}
								// #endif

								// #ifdef APP-PLUS
								var url = '/pages/accountLogin/accountLogin'
								// #endif
								uni.navigateTo({ url: url })
							} else {
								if(params.unAuthGoback){
									//返回层数，2则上上页
									uni.navigateBack({ delta: 1 })
								}
								// uni.switchTab({
								// 	url: '/pages/index/index'
								// })
							}
						}
					})
				} else {
					uni.showModal({title: "提示", content: "登录已过期", cancelText: "取消", confirmText: "确定",
						success: res => {
							if (res.confirm) {
								// 跳转登录页面
								// #ifdef H5
								uni.navigateTo({
									// url: uni.getStorageSync('appType') == AppType.MP ? '/pages/login/login' : '/pages/accountLogin/accountLogin'
									url: uni.getStorageSync('appType') == AppType.MP ? '/pages/accountLogin/accountLogin' : '/pages/accountLogin/accountLogin'
								})
								// #endif

								// #ifdef MP-WEIXIN
								// uni.navigateTo({ url: '/pages/login/login' })
								uni.navigateTo({ url: '/pages/accountLogin/accountLogin' })
								// #endif
							} else {
								uni.switchTab({ url: '/pages/index/index' })
							}
						}
					})
			// 		// 跳转登录页面
			// 		// #ifdef H5
			// 		uni.navigateTo({
			// 			url: uni.getStorageSync('appType') == AppType.MP ? '/pages/login/login' : '/pages/accountLogin/accountLogin'
			// 		})
			// 		// #endif

			// 		// #ifdef MP-WEIXIN
			// 		uni.navigateTo({
			// 			url: '/pages/login/login'
			// 		})
			// 		// #endif
				}
			}
			return
      }

      // 服务器出了点小差
      if (responseData.code === 5001) {
        console.error('============== 请求异常 ==============')
        console.log('接口: ', params.url)
        console.log('异常信息: ', responseData)
        console.error('============== 请求异常 ==============')
        if (params.errCallBack) {
          params.errCallBack(responseData)
          return
        }
        uni.showToast({ title: '服务器出了点小差~', icon: 'none' })
      }

      // A00001 用于直接显示提示用户的错误，内容由输入内容决定
      if (responseData.code === 1001) {
        if (params.errCallBack) {
          params.errCallBack(responseData)
          return
        }
        uni.showToast({ title: responseData.msg || 'Error', icon: 'none' })
        return
      }

      // 其他异常
      if (responseData.code !== 1000) {
        // console.log('params', params)
        if (params.errCallBack) {
          params.errCallBack(responseData)
        } else {
          console.log(`接口: ${params.url}`)
          console.log(`返回信息： `, res)
        }
		uni.showToast({ title: responseData.msg || 'Error', icon: 'none' })
      }
			
      if (!globalData.isLanding) {
        wx.hideLoading();
      }
    },
    fail: function (err) {
		uni.hideLoading();
		if (err.errMsg == 'request:fail abort') {
			console.log('请求被取消啦~')
			return
		}
		setTimeout(() => {
			uni.showToast({ title: "服务器出了点小差", icon: "none" });
		}, 1);
    }
  });
} //通过code获取token,并保存到缓存

function get(url, data, callBack, pm1, pm2){
	let fail = pm1 && pm1 instanceof Function ? pm1 : undefined;
	let unAuthGoback = pm2 != undefined ? !!pm2 : (pm1 && !(pm1 instanceof Function) ? true : false)
	request({
		url: url,
		method: "GET",
		data: data,
		callBack: callBack, 
		fail: fail,
		unAuthGoback : unAuthGoback
	})
}

function post(url, data, callBack, pm1, pm2){
	let fail = pm1 && pm1 instanceof Function ? pm1 : undefined;
	let unAuthGoback = pm2 != undefined ? !!pm2 : (pm1 && !(pm1 instanceof Function) ? true : false)
	request({
		url: url,
		method: "POST",
		data: data,
		callBack: callBack,
		fail: fail,
		unAuthGoback : unAuthGoback
	})
}

function put(url, data, callBack, pm1, pm2){
	let fail = pm1 && pm1 instanceof Function ? pm1 : undefined;
	let unAuthGoback = pm2 != undefined ? !!pm2 : (pm1 && !(pm1 instanceof Function) ? true : false)
	request({
		url: url,
		method: "put",
		data: data,
		callBack: callBack,
		fail: fail,
		unAuthGoback : unAuthGoback
	})
}

var getToken = function () {
  // uni.login({
  //   success: res => {
  //     // 发送 res.code 到后台换取 openId, sessionKey, unionId
  //     request({
  //       login: true,
  //       url: '/login?grant_type=mini_app',
  //       data: {
  //         principal: res.code
  //       },
  //       callBack: result => {
  //         // 没有获取到用户昵称，说明服务器没有保存用户的昵称，也就是用户授权的信息并没有传到服务器
  //         if (!result.nickName) {
  //           updateUserInfo();
  //         }

  //         if (result.userStutas == 0) {
  //           uni.showModal({
  //             showCancel: false,
  //             title: '提示',
  //             content: '您已被禁用，不能购买，请联系客服'
  //           });
  //           uni.setStorageSync('token', '');
  //         } else {
  //           uni.setStorageSync('token', 'bearer' + result.access_token); //把token存入缓存，请求接口数据时要用
  //         }

  //         var globalData = getApp().globalData;
  //         globalData.isLanding = false;

  //         while (globalData.requestQueue.length) {
  //           request(globalData.requestQueue.pop());
  //         }
  //       }
  //     }, true);
  //   }
  // });
}; // 更新用户头像昵称

/**
 * 微信公众号登录
 * @param {Object} fn  登录成功回调
 * @param {String} code  微信授权返回的code, 用于登录
 */
var mpLogin = function (fn, code) {
	// 发送 res.code 到后台换取 openId, sessionKey, unionId
	request({
		login: true,
		url: '/appLogin',
		data: {
			principal: code,
			appType: AppType.MP, // 登录类型
		},
		callBack: result => {
			loginSuccess(result, fn)
		}
	}, true);

};

var getToken = function (fn) {

};

/**
 * 登录成功后执行
 * @param {Object} result  登录成功返回的数据
 * @param {Object} fn		登录成功后的回调
 */
function loginSuccess (result, fn) {
	// if (!result.enabled) {
	// 	uni.showModal({
	// 		showCancel: false,
	// 		title: "提示",
	// 		content: "您已被禁用，不能购买，请联系客服",
	// 		cancelText: "取消",
	// 		confirmText: "确定",
	// 		success: function (res) {
  //       if (res.confirm) {
	// 				wx.switchTab({
	// 					url: '/pages/index/index'
	// 				});
  //       }
	// 		}
	// 	})
	// 	wx.setStorageSync('token', '');
	// 	return
	// }

	// 保存登陆信息
	wx.setStorageSync('loginResult', result)
	// 保存成功登录标识,token过期判断
	wx.setStorageSync('hadLogin', true)
	// 没有获取到用户昵称，说明服务器没有保存用户的昵称，也就是用户授权的信息并没有传到服务器
	// if (!result.pic) {
	// 	updateUserInfo();
	// }  
	const expiresTimeStamp = result.exp * 1000 / 2 + new Date().getTime()
  // 缓存token的过期时间
  uni.setStorageSync('expiresTimeStamp', expiresTimeStamp)

	wx.setStorageSync('token', result.token); //把token存入缓存，请求接口数据时要用

  // const routeUrlAfterLogin = uni.getStorageSync('routeUrlAfterLogin')
  // const pages = getCurrentPages()
  // if (pages.length === 1) {
  //   uni.reLaunch({
  //     url: routeUrlAfterLogin
  //   })
  //   uni.removeStorageSync('routeUrlAfterLogin')
  //   return
  // }
  // const prevPage = pages[pages.length - 2]
  // if (!prevPage) {
	// 	wx.switchTab({
	// 		url: '/pages/index/index'
	// 	});
  //   return
  // }
  // // 判断上一页面是否为tabbar页面 (首页和分类页无需登录接口)
  // const isTabbar = prevPage.route === 'pages/user/user' || prevPage.route === 'pages/basket/basket'
  // if (isTabbar) {
	// 	wx.switchTab({
	// 		url: '/' + prevPage.route
	// 	});
  // } else {
  //   // 非tabbar页面
  //   let backDelata = 0
  //   pages.forEach((page, index) => {
  //     if (page.$page.fullPath === routeUrlAfterLogin) {
  //       backDelata = pages.length - index - 1
  //     }
  //   })
  //   if (backDelata) {
  //     uni.navigateBack({
  //       delta: backDelata
  //     })
  //   } else {
	// 		wx.switchTab({
	// 			url: '/pages/index/index'
	// 		});
  //   }
  // }

	if (fn) {
		fn()
	}
};

function updateUserInfo() {
  uni.getUserInfo({
    success: res => {
      var userInfo = JSON.parse(res.rawData);
      request({
        url: "/user/setUserInfo",
        method: "PUT",
        data: {
          avatarUrl: userInfo.avatarUrl,
          nickName: userInfo.nickName
        }
      });
    },
	fail: err => {
	  console.log("获取用户信息失败");
	}
  });
}

function isUserAuthInfo () {
	// 查看是否授权
	wx.getSetting({
		success (res) {
			if (res.authSetting['scope.userInfo']) {
				// 已经授权，可以直接调用 getUserInfo 获取头像昵称
				wx.getUserInfo({
					success: function (res) {
						console.log(res.userInfo);
					}
				});
			}
		}
	});
}

function mpAuthLogin (page, needCode) {
	// 在微信环境打开,请求公众号网页登陆
	var redirectUrl = null;

	if (!page) {
		redirectUrl = window.location.href
	} else {
		var {
			protocol,
			host,
			pathname,
			hash
		} = window.location
		var redirectUrl = `${protocol}//${host}` + page
	}
	var scope = 'snsapi_userinfo'
	window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + config.mpAppId +
		'&redirect_uri=' +
		encodeURIComponent(redirectUrl) + '&response_type=code&scope=' + scope + '&state=' + (needCode ? 'needCode' :
			'unNeedCode') +
		'#wechat_redirect'

}

/**
 * 获取购物车商品数量
 */
function getCartCount () {
	if (!uni.getStorageSync('token')) {
		// wx.removeTabBarBadge({
		// 	index: 2
		// });
		util.removeTabBadge()
		return
	}
	request({
		url: "/shopCart/prodCount",
		method: "GET",
		dontTrunLogin: true,
		data: {},
		callBack: function (res) {
			if (res > 0) {
				wx.setTabBarBadge({ index: 2, text: res + "" });
				var app = getApp().globalData;
				getApp().globalData.totalCartCount = res;
			} else {
				wx.removeTabBarBadge({ index: 2 });
				var app = getApp().globalData;
				getApp().globalData.totalCartCount = 0;
			}
		}
	});
}

exports.getToken = getToken;
exports.request = request;
exports.get = get;
exports.post = post;
exports.put = put;
exports.getCartCount = getCartCount;
exports.updateUserInfo = updateUserInfo;
exports.mpAuthLogin = mpAuthLogin;
exports.loginSuccess = loginSuccess;
exports.mpLogin = mpLogin;
